<?php

namespace Modules\Admin\Http\Controllers\Orders;

use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;
use Modules\Common\General\Security\Api\Gateway;
use Modules\Common\Models\AdminLog;
use Modules\Common\Models\Orders;
use Modules\Common\Util\Api;
use Modules\Common\Util\Database;


class Retrieve
{
    /**
     * 会员订阅
     * @Route(path=/api/admin/member-orders)
     */
    public function retrieve()
    {
        $query = Orders::where('subscription_type_id', '<>', '')
        // 预加载 member 关联，并嵌套预加载 subscription_type 关联
        ->with(['member' => function ($query) {
            $query->with('subscription_type');
        }])
        // 预加载 user 关联
        ->with('user');
        // 流水号查询
        $orderSn = request('order_sn');
        if ($orderSn) {
            $query->where('order_sn', 'like', '%' . $orderSn . '%');
        }
        
        $nickname = request('nickname');
        if ($nickname) {
            // 获取匹配昵称的用户 ID 列表
            $userIds = DB::connection('platform')->table('customer')
                ->where('nickname', 'like', '%' . $nickname . '%')
                ->pluck('id')
                ->all();
        
            // 确保获取到了用户 ID
            if (count($userIds) > 0) {
                $query->whereIn('user_id', $userIds);
            } else {
                // 如果没有匹配的用户，返回空结果
                $query->whereNull('user_id');
            }
        }
        $phone = request('phone');
        if ($phone) {
            // 在 'platform' 数据库上执行查询以获取匹配电话号码的用户 ID 列表
            $userIds = DB::connection('platform')->table('customer')
                ->where('phone', 'like', '%' . $phone . '%')
                ->pluck('id')
                ->all();
        
            // 确保获取到了用户 ID
            if (count($userIds) > 0) {
                $query->whereIn('user_id', $userIds);
            } else {
                // 如果没有匹配的用户，返回空结果
                $query->whereNull('user_id');
            }
        }
    
        // 状态查询
        $status = request('status');
        if ($status) {
            $query->where('status', '=', $status);
        }
        
        // 时间范围查询
        $startAt = request('start_at');
        if ($startAt) {
            $query->where('created_at', '>', $startAt);
        }
    
        $endAt = request('end_at');
        if ($endAt) {
            $query->where('created_at', '<', $endAt);
        }
        
        // 优化排序
        $query->orderBy('id', 'desc')->orderBy('created_at', 'desc');


        $sidDefault = auth('api')->user()->sid;
        $eidDefault = auth('api')->user()->eid; 

        $data = $query->where('sid',$sidDefault)->where('eid',$eidDefault)->paginate(request('per_page', 15));

        return Api::success($data);
    }
    
    
    /**
     * 一次性购买
     * @Route(path=/api/admin/book-orders)
     */
    public function index()
    {
        $query = Orders::where('ebook_id', '<>', '')
            ->with(['ebook', 'user']); // 预加载 ebook 和 user 关联
        // 流水号查询
        $orderSn = request('order_sn');
        if ($orderSn) {
            $query->where('order_sn', 'like', '%' . $orderSn . '%');
        }
        
        $bookName = request('book_name');
        if ($bookName) {
            $query->whereHas('ebook', function ($query) use ($bookName) {
                $query->where('book_name', 'like', '%' . $bookName . '%');
            });
        }
        
        $nickname = request('nickname');
        if ($nickname) {
            // 获取匹配昵称的用户 ID 列表
            $userIds = DB::connection('platform')->table('customer')
                ->where('nickname', 'like', '%' . $nickname . '%')
                ->pluck('id')
                ->all();
        
            // 确保获取到了用户 ID
            if (count($userIds) > 0) {
                $query->whereIn('user_id', $userIds);
            } else {
                // 如果没有匹配的用户，返回空结果
                $query->whereNull('user_id');
            }
        }
        $phone = request('phone');
        if ($phone) {
            // 在 'platform' 数据库上执行查询以获取匹配电话号码的用户 ID 列表
            $userIds = DB::connection('platform')->table('customer')
                ->where('phone', 'like', '%' . $phone . '%')
                ->pluck('id')
                ->all();
        
            // 确保获取到了用户 ID
            if (count($userIds) > 0) {
                $query->whereIn('user_id', $userIds);
            } else {
                // 如果没有匹配的用户，返回空结果
                $query->whereNull('user_id');
            }
        }
    
        // 状态查询
        $status = request('status');
        if ($status) {
            $query->where('status', '=', $status);
        }
        
        // 时间范围查询
        $startAt = request('start_at');
        if ($startAt) {
            $query->where('created_at', '>', $startAt);
        }
    
        $endAt = request('end_at');
        if ($endAt) {
            $query->where('created_at', '<', $endAt);
        }
        
        // 优化排序
        $query->orderBy('id', 'desc')->orderBy('created_at', 'desc');

        $sidDefault = auth('api')->user()->sid;
        $eidDefault = auth('api')->user()->eid; 

        $data = $query->where('sid',$sidDefault)->where('eid',$eidDefault)->paginate(request('per_page', 15));

        return Api::success($data);
    }

}